重载new和delete运算符的目是为了自定义内存分配的细节。（内存池：快速分配和归还，无碎片）
建议先学习C语言的内存管理函数malloc()和free()。
在C++中，使用new时，编译器做了两件事情：
1）调用标准库函数operator new()分配内存；
2）调用构造函数初始化内存；
使用delete时，也做了两件事情：
1）调用析构函数；
2）调用标准库函数operator delete()释放内存。
构造函数和析构函数由编译器调用，我们无法控制。
但是，可以重载内存分配函数operator new()和释放函数operator delete()。
1）重载内存分配函数的语法：void* operator new(size_t size);   
参数必须是size_t，返回值必须是void*。
2）重载内存释放函数的语法：void operator delete(void* ptr)   
参数必须是void *（指向由operator new()分配的内存），返回值必须是void。
重载的new和delete可以是全局函数，也可以是类的成员函数。
为一个类重载new和delete时，尽管不必显式地使用static，但实际上仍在创建static成员函数。
编译器看到使用new创建自定义的类的对象时，它选择成员版本的operator new()而不是全局版本的new()。
new[]和delete[]也可以重载。
示例：

#include <iostream>         // 包含头文件。
using namespace std;        // 指定缺省的命名空间。
                   
void* operator new(size_t size)   // 参数必须是size_t（unsigned long long），返回值必须是void*。
{
	cout << "调用了全局重载的new：" << size << "字节。\n";
	void* ptr = malloc(size);        // 申请内存。
	cout << "申请到的内存的地址是：" << ptr << endl;
	return ptr;
}
                
void operator delete(void* ptr)   // 参数必须是void *，返回值必须是void。
{
	cout << "调用了全局重载的delete。\n";
	if (ptr == 0) return;       // 对空指针delete是安全的。
	free(ptr);      // 释放内存。
}
          
class CGirl       // 超女类CGirl。
{
public:
	int        m_bh;               // 编号。
	int        m_xw;               // 胸围。
                               
	CGirl(int bh, int xw) { m_bh = bh, m_xw = xw;  cout << "调用了构造函数CGirl()\n"; }
	~CGirl() { cout << "调用了析构函数~CGirl()\n"; }
	void* operator new(size_t size)   // 参数必须是size_t（unsigned long long），返回值必须是void*。
	{
		cout << "调用了类的重载的new：" << size << "字节。\n";
		void* ptr = malloc(size);        // 申请内存。
		cout << "申请到的内存的地址是：" << ptr << endl;
		return ptr;
	}
         
	void operator delete(void* ptr)   // 参数必须是void *，返回值必须是void。
	{
		cout << "调用了类的重载的delete。\n";
		if (ptr == 0) return;       // 对空指针delete是安全的。
		free(ptr);      // 释放内存。
	}
};    
     
int main()
{
	int* p1 = new int(3);
	cout << "p1=" << (void *)p1 <<"，*p1=" <<*p1<< endl;
	delete p1;
             
	CGirl* p2 = new CGirl(3, 8);
	cout << "p2的地址是：" << p2 << "编号：" << p2->m_bh << "，胸围：" << p2->m_xw << endl;
	delete p2;
}

